﻿using System;
using System.Collections.Generic;
using System.ServiceModel;
using StockholmsStad.Business;
using StockholmsStad.Runtime.Serialization.DataContract.Enums;
using StockholmsStad.Utilities.Exceptions;
using StockholmsStad.Runtime.Serialization.DataContract;
using StockholmsStad.ServiceModel.Interfaces;

namespace StockholmsStad.ServiceModel.Services
{
    /// <summary>
    /// Detta är serviceimplementationsklassen för servicen IBookingService.
    /// </summary>
    public class BookingService : IBookingService
    {
        #region IBookingService Members

        //TODO Flytta alla metoder som har men Booking till denna tjänst


        /// <summary>
        /// Operationskontraktet som hämtar tidsblock för ett givet datumintervall. 
        /// </summary>
        /// <param name="user">Den inloggade användaren (<see cref="User"/>).</param>
        /// <param name="fromDate"></param>
        /// <param name="toDate"></param>
        /// <returns>En lista med de aktuella tidsblocken <see cref="TimeBlock"/>.</returns>
        public IList<TimeBlock> GetFreeTimeBlockDateTimes(User user, DateTime fromDate, DateTime toDate)
        {
            try
            {
                return new BookingBusiness(user).GetFreeTimeBlockDateTimes(fromDate, toDate);
            }
            catch (StockholmStadSystemException e)
            {
                throw new FaultException<StockholmStadSystemErrorFault>(new StockholmStadSystemErrorFault(e.ErrorCode, e.Message));
            }
            catch (StockholmStadApplicationException e)
            {
                throw new FaultException<StockholmStadApplicationErrorFault>(new StockholmStadApplicationErrorFault(e.ErrorCode, e.Message));
            }
        }

        #endregion
    }
}
